package com.tq.portal.connector.gitlab.model.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * GitLab 活动信息
 *
 * @author TqCoder
 * @since 2.0.0
 */
@Data
public class GitLabActivityDTO {

    /**
     * 项目ID
     */
    @JsonProperty("project_id")
    private Integer projectId;

    /**
     * 操作名称（如：pushed to, opened, closed, merged）
     */
    @JsonProperty("action_name")
    private String actionName;

    /**
     * 目标ID
     */
    @JsonProperty("target_id")
    private Integer targetId;

    /**
     * 目标内部ID
     */
    @JsonProperty("target_iid")
    private Integer targetIid;

    /**
     * 目标类型（如：MergeRequest, Issue）
     */
    @JsonProperty("target_type")
    private String targetType;

    /**
     * 作者ID
     */
    @JsonProperty("author_id")
    private Integer authorId;

    /**
     * 目标标题
     */
    @JsonProperty("target_title")
    private String targetTitle;

    /**
     * 创建时间
     */
    @JsonProperty("created_at")
    private LocalDateTime createdAt;

    /**
     * 作者信息
     */
    private Author author;

    /**
     * 推送数据（仅推送事件有）
     */
    @JsonProperty("push_data")
    private PushData pushData;

    /**
     * 作者用户名
     */
    @JsonProperty("author_username")
    private String authorUsername;

    /**
     * 作者信息
     */
    @Data
    public static class Author {
        /**
         * 用户ID
         */
        private Integer id;

        /**
         * 用户名称
         */
        private String name;

        /**
         * 用户名
         */
        private String username;

        /**
         * 状态
         */
        private String state;

        /**
         * 头像URL
         */
        @JsonProperty("avatar_url")
        private String avatarUrl;

        /**
         * 个人主页URL
         */
        @JsonProperty("web_url")
        private String webUrl;
    }

    /**
     * 推送数据
     */
    @Data
    public static class PushData {
        /**
         * 提交数量
         */
        @JsonProperty("commit_count")
        private Integer commitCount;

        /**
         * 操作类型（pushed, created, removed）
         */
        private String action;

        /**
         * 引用类型（branch, tag）
         */
        @JsonProperty("ref_type")
        private String refType;

        /**
         * 起始提交
         */
        @JsonProperty("commit_from")
        private String commitFrom;

        /**
         * 目标提交
         */
        @JsonProperty("commit_to")
        private String commitTo;

        /**
         * 分支或标签名称
         */
        private String ref;

        /**
         * 提交标题
         */
        @JsonProperty("commit_title")
        private String commitTitle;

        /**
         * 引用数量
         */
        @JsonProperty("ref_count")
        private Integer refCount;
    }
}

